本项目实现了一个轻量级的协作式任务调度器,适用于STM32F407等资源受限的嵌入式系统。
BSP/COMMON/
├── task_scheduler.h # 任务调度器头文件
├── task_scheduler.c # 任务调度器实现
├── app_tasks.h # 应用任务头文件
├── app_tasks.c # 应用任务实现
└── user_init.c # 用户初始化(已修改)
typedef enum {
TASK_PRIORITY_IDLE = 0, // 空闲任务
TASK_PRIORITY_LOW, // 低优先级
TASK_PRIORITY_NORMAL, // 正常优先级
TASK_PRIORITY_HIGH, // 高优先级
TASK_PRIORITY_CRITICAL // 关键任务
} TaskPriority_t;
typedef enum {
TASK_READY = 0, // 就绪状态
TASK_RUNNING, // 运行状态
TASK_BLOCKED, // 阻塞状态
TASK_SUSPENDED // 挂起状态
} TaskState_t;
HAL_StatusTypeDef TaskScheduler_Init(void);
HAL_StatusTypeDef TaskScheduler_AddTask(
TaskFunction_t function, // 任务函数指针
uint32_t period, // 执行周期(ms)
TaskPriority_t priority, // 任务优先级
const char* name // 任务名称
);
void TaskScheduler_Run(void); // 在主循环中调用
void TaskScheduler_SuspendTask(const char* taskName); // 挂起任务
void TaskScheduler_ResumeTask(const char* taskName); // 恢复任务
void TaskScheduler_DeleteTask(const char* taskName); // 删除任务
uint32_t TaskScheduler_GetSystemTick(void); // 获取系统时钟
uint8_t TaskScheduler_GetTaskCount(void); // 获取任务数量
void TaskScheduler_PrintTaskInfo(void); // 打印任务信息
项目包含以下示例任务:
void MyTask(void)
{
// 任务代码
// 注意:任务应该尽快完成,避免长时间阻塞
}
void User_Init(void)
{
// 其他初始化代码...
// 初始化任务调度器
TaskScheduler_Init();
// 添加自定义任务
TaskScheduler_AddTask(MyTask, 100, TASK_PRIORITY_NORMAL, "MyTask");
}
int main(void)
{
// 系统初始化...
User_Init();
while (1)
{
TaskScheduler_Run(); // 运行任务调度器
}
}
使用 TaskScheduler_PrintTaskInfo() 可以输出所有任务的状态信息,方便调试。